package com.wr.lock8_14;

import java.util.concurrent.TimeUnit;

/**
 * 锁的8个问题
 * 1、
 * 标准情况控制台先打印什么？
 * 答案：先短信   后电话 （两者中间有休眠，发短信的线程优先拿到cpu资源）
 * 2、
 * 在发短信中加入阻塞，先打印什么？
 * 答案：先短信  后电话（发短信没有释放锁，会一直阻塞直到发短信释放锁之后才打电话）
 *
 * synchronized：锁的对象是方法的调用者！！！  案例中只有一个对象，公用一把锁
 */
public class Test1 {
    public static void main(String[] args) {
        Phone phone = new Phone();

        new Thread(()->{
            phone.sendSms();
        },"A").start();

        // 休息一下
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        new Thread(()->{
            phone.call();
        },"B").start();
    }

}

class Phone{
    public synchronized void sendSms(){

        // 第二种情况：上阻塞
//        try {
//            TimeUnit.SECONDS.sleep(3);
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
        System.out.println("发短信");
    }

    public synchronized void call(){
        System.out.println("打电话");
    }
}